package bbalgae;

public class J15_OOP1 {

	/*	객체지향 개발기법
	 * 	OOP : 객체를 기반으로 프로그램을 작성하는 것
	  	OOP언어로 응용 프로그램을 개발하는 경우, 문제 해결을 위해 실제 상황과 유사한 모델을 만들어야 한다.
	   																			
	 * 	예를 들어, 직원 세금을 계산하는 프로그램 작성
	  	프로그램에서 회사를 표현하는 회사객체가 필요하다. 또한 프로그램에서 직원을 표현하는 직원객체,세금을  나타내는 세금객체도 필요하다.
	  	회사,직원,세금 객체를 자바프로그램에서 코드로 나타내는 방법에 대해 알아보자.
	  	
	 * 	모든 객체에는 2가지 성질이 있다. [속성 - Property], 객체가 할 수 있는 [행동 - Action]
	  	현실세계에 존재하는 객체를 자바언어로 가져오는 경우에도 속성과 행동은 있어야 함.
	  	자바에서 속성은 field, 행위는 Method 라고 한다.
	  	field와 Method는 선택사항(생략가능)이다.
	  	
	 * 	자바 객체를 만드는 방법은? - 설계도를 이용
	  	'차'라는 객체를 잘 만들려면 좋은차로 만들어주는 [설계도]를 참고 
	  	OOP에서 객체를 만들어주는 설계도를 클래스라고 한다. 
	  
	 * 	클래스는 동일한 유형의 객체를 만드는 청사진/설계도 또는 템플릿임(중요)
	  	붕어빵 - 객체
	  	붕어빵 기계 - 클래스
	  	밀가루, 팥 - 속성
	 
	 * 	클래스는 당신이 만들려는 객체의 종류를 결정함
	  	요약하자면 클래스는 프로그래머로 하여금 문제의 추상화를 만들 수 있게 해주는 OOP 도구임
	 	OOP에서 추상화 abstraction는 실제 객체를 표현하기 위해 객체에서 핵심적인 개념 또는 기능을 뽑아 프로그래밍 객체로 만드는 행위를 말함.
	 
	 *	클래스는 자바 프로그램의 기본뼈대(초보자는 클래스를 작성할때 클래스 이름,필드,메서드 등을 고려할 것.)
	 
	 * 	클래스 만들기
	  	class className {
	  		[class body]-필드 또는 메소드
	  		}
	 * 	클래스의 이름은 반드시 대문자로 써얗함.
	 *	클래스 정의시 클래스 이름과 파일 이름은 반드시 동일하게 저장해야한다.
	 *	클래스 내에 선언된 변수를 field 라 함.
	 *	
	 *	변수의 종류
	 *	멤버 변수
	 *		->class 블록내 선언한 변수
	 *		->해당 클래스를 통해서만 사용가능한 변수
	 *	인스턴스(instance/object) 변수
	 *		->객체를 가리키는 변수를 의미
	 *		->클래스와 new 연산자를 사용한 문장의 실행 결과물 
	 *
	 *
	 */		 
	
	public static void main(String[] args){
		
		//클래스를 사용하지 않고 학생객체 생성
	/*		
		String name1 = "박미진";
		int stdno1 = 930526;
		String addr1 = "서울시 중랑구 상봉아트빌";
		int mp1 = 64743435;
	
		String name2 = "김윤호";
		int stdno2 = 891204;
		String addr2 = "서울시 중랑구 상봉아트빌";
		int mp2 = 62615283;
		*/		
	
		//학생 객체 생성
		Student 김윤호 = new Student();
		김윤호.name = "김윤호";																						
		김윤호.stdno = 891204;
		김윤호.mp = 62615283;
		김윤호.addr = "서울시 종로구 ";
		
		Student 박미진 = new Student();
		박미진.name = "박미진";
		박미진.stdno = 930526;
		박미진.mp = 64743435;
		박미진.addr = "서울시 중랑구";
		
	}	// main
	
} 	// class

	//클래스 정의 - 클래스의 이름은 첫글자를 대문자로 지정해야함.


	class Student{
	//필드선언 (멤버변수)
		String name;
		int stdno;
		String addr;
		int mp;

	class Customer{
		//필드선언
	
		String id;
		String pwd;
		String name;
		int mp;
		String email;
		
	}
	
	class Product{
		int snumber;
		String item;
		int cheap;
		String Type;
		String maker;
		
	}
	
	class TerranUnit{ //생명력 , 에너지,방어력,광물, 베스핀, 보급품, 생산시간
		
		int life;
		int energy;
		int dp;
		int mineral;
		int gas;
		int supplies;
		int maketime;
		
	}
	
	}